package com.infore.airsupervise.db;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


import java.util.List;

/**
 * Created by xiaotao on 2017/6/2.
 */

public  abstract class MyOpenHelper<T> extends SQLiteOpenHelper  {
    private String tablename;
    private static final String DATABASE_NAME= "airsupervise.db";



    public MyOpenHelper(Context context, int version) {
        //第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,设置为null,代表使用系统默认的工厂类;
        super(context, DATABASE_NAME, null, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    /**
     * 判断表是否存在
     * @param table
     * @return
     */
    protected boolean isTableExist(Class table){
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.query("sqlite_master", null, "type = 'table' and name = ?", new String[]{table.getName().replaceAll("\\.", "_")}, null, null, null);
       // Cursor cursor = db.rawQuery("SELECT count(*) FROM sqlite_master WHERE type='table' AND name="+"'"+table.getName().replaceAll("\\.", "_")+"'",null);
        String name[] = cursor.getColumnNames();
        Boolean isExist = cursor.getCount()>0 ;
        cursor.close();
        return isExist;
    }

    /**
     *
     * @param tableName
     */
    protected void  clear(String tableName){ //清空对应表名中的所有数据
        SQLiteDatabase db = getWritableDatabase();
        db.delete(tableName,null,null);
    }
    /**
     * 创建表 不存在则创建
     * @param table
     */
    protected abstract void createTable(Class table);

    /**
     * 保存一个数据
     * @param t
     */
    public abstract void save(T t);
    /**
     * 保存一个数据集合
     * @param
     */
    public abstract void saveAll(List<T> list);

    /**
     * 通过表名，查询所有的数据，表名对应于类名
     * @return
     */
    public abstract List<T> queryAll();

    /**
     *
     * @return
     */
    public abstract void updata(T t);

    /**
     * 删除对应的数据;
     * @param t
     */
    public abstract void delete(T t);

    public abstract void deleteAll(List<T> list);

}
